package org.fixies.database.dbunit;

import org.dbunit.dataset.*;
import org.fixies.spreadsheet.Unit;
import org.fixies.utils.Validator;

import java.util.Arrays;
import java.util.List;


/**
 * org.dbunit.dataset.IDataSetの実装クラス
 *
 * @author Kawasaki
 * @see org.dbunit.dataset.IDataSet
 */
public class DataSetImpl extends AbstractDataSet {

    private final ITable[] tables_;

    public DataSetImpl(Unit unit) {
        this(new Unit[]{unit});
    }


    public DataSetImpl(ITable table) {
        this(new ITable[]{table});
    }

    public DataSetImpl(ITable[] tables) {
        Validator.notNullOrEmpty(tables);
        tables_ = tables.clone();
    }

    /**
     * コンストラクタ
     *
     * @param testDataSet 子表
     */
    public DataSetImpl(Unit[] unit) {

        this(Arrays.asList(unit));
    }

    /**
     * コンストラクタ
     *
     * @param units 子表（Unit）を要素とするList
     */
    public DataSetImpl(List<Unit> units) {
        Validator.notNullOrEmpty(units);
        ITable[] tables = new TableImpl[units.size()];
        int i = 0;
        for (Unit unit : units) {
            tables[i++] = new TableImpl(unit);
        }
        tables_ = tables;
    }

    /**
     * @see org.dbunit.dataset.AbstractDataSet#createIterator(boolean)
     */
    protected ITableIterator createIterator(boolean reversed)
            throws DataSetException {

        return new DefaultTableIterator(tables_, reversed);
    }
}
